/* * * * M A P V I S I O N   L I C E N S E  *****************************************************************
         *
         * This MapVision software is © Filip Zavadil 2013. It is licensed under the LGPL license.
         * This MapVision software dynamically links to unmodified Qt5 Library.
         *
         * The Qt5 Library is © 2013 Qt® and/or its subsidiary(-ies), and is licensed under the
         * GNU Lesser General Public License version 2.1 with Qt® LGPL exception version 1.1.
         * Qt5 library is free software; you can redistribute it and/or modify it under the terms of the
         * GNU Lesser General Public License, version 2.1, as published by the Free Software Foundation.
         * Qt5 library is provided “AS IS”, without WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
         * IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
         * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
         *
         * As an additional permission to the GNU Lesser General Public License version 2.1, the object
         * code form of a “work that uses the Library” may incorporate material from a header file that is
         * part of the Library. You may distribute such object code under terms of your choice,
         * provided that: (i) the header files of the Library have not been modified; and (ii)
         * the incorporated material is limited to numerical parameters, data structure layouts, accessors,
         * macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the
         * GNU Lesser General Public License version 2.1.
         *
         * Moreover, you may apply this exception to a modified version of the Library, provided that such
         * modification does not involve copying material from the Library into the modified Library’s header
         * files unless such material is limited to (i) numerical parameters; (ii) data structure layouts;
         * (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length.
         *
         * Furthermore, you are not required to apply this additional permission to a modified version of the Library.
         *
         * You should have received a copy of the GNU Lesser General Public License along with this package;
         * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

         * The source code for Qt 5.X SDK is available from Qt Project here:
         * http://download.qt-project.org/official_releases/qtcreator/2.7/2.7.0/qt-creator-2.7.0-src.zip.
         *
         * ****************************** M A P V I S I O N    S O F T W A R E  ************************************
         *
         * Author:       Filip Zavadil
         * Description:  Software for displaying and exporting map tiles.
         * The sources and executables of MapVision software are available:
         *    - from project hosting on CodePlex.com :   http://mapvision.codeplex.com
         *    - from GIT repositories on Gitorious.org:  https://gitorious.org/mapvision
         * Visit MapVision fanpage on Facebook.com:      https://www.facebook.com/pages/Mapvision/631827753513935
         *
         * *********************************************************************************************************
*/
#include "dialoglayerimg.h"
#include "ui_dialoglayerimg.h"
#include "layerimg.h"

DialogLayerIMG::DialogLayerIMG(QWidget *parent, LayerIMG *layer_) :
    QDialog(parent), ui(new Ui::DialogLayerIMG), layer(layer_)
{
    ui->setupUi(this);
    this->setWindowTitle(tr("Add Georeferenced Image"));

}

DialogLayerIMG::~DialogLayerIMG()
{
    delete ui;
}

void DialogLayerIMG::on_pushButtonCurrenOrigin_clicked()
{
    ui->lineEditOriginLonlat->setText(layer->zavaProj.lonlat2dms(layer->getMapView()->getCenterLonLat()));
    ui->spinBoxZoom->setValue(layer->getMapView()->getZoom());
}

void DialogLayerIMG::on_pushButtonOpen_clicked()
{
    QString path=layer->settings.value("layer/IMG").toString();
    dir = QFileDialog::getOpenFileName(this, tr("Open image worldfile"),
                                       path,
                                       tr("Portable Network graphics (*.png);;"));

    if (dir == "") this->reject();

    layer->settings.setValue("layer/IMG",dir);
    layer->setLayerType(Layer::GeoImage);
    layer->YaxisOrigin = ZavaProj::BOTTOM;
    ui->lineEditPath->setText(dir);


    QString dirW = dir;
    dirW.remove(dir.size()-2,1);
    dirW+="w";

    if (layer->loadWorldFileTiny(dirW)){
        ui->plainTextEditWorldFile->setPlainText(layer->getItems().join("\n"));

    } else if (layer->loadWorldFileTiny(dir+"w")) {
        ui->plainTextEditWorldFile->setPlainText(layer->getItems().join("\n"));
    } else {
        QMessageBox msgBox;
        msgBox.setText(tr("Worldfile is invalid or is missing!"));
        msgBox.exec();
        return;
    }

    if (layer->getItems().size()==6){
        QPixmap img(0,0);
        if (!img.load(dir)|| img.height() == 0){
            QMessageBox msgBox;
            msgBox.setText(tr("Image was not loaded ! "));
            msgBox.exec();
            this->reject();
            return;
        }
        layer->setIMG(img);
        layer->processWorldFile();
        ui->lineEditOriginLonlat->setText(layer->zavaProj.lonlat2dms(layer->getOriginPoint()));
        ui->spinBoxZoom->setValue(layer->getOriginZoom());
        ui->layerName->setText(dir.mid(dir.lastIndexOf("/")+1,-1));
    }
}

void DialogLayerIMG::on_buttonBox_accepted()
{

    if (layer->getItems().size()==6){
        layer->setOrigin(layer->zavaProj.dms2lonlat(ui->lineEditOriginLonlat->text()),ui->spinBoxZoom->value());
        layer->getMapView()->setZoom(ui->spinBoxZoom->value());
        layer->getMapView()->setCenterLonLat(layer->zavaProj.dms2lonlat(ui->lineEditOriginLonlat->text()));
        layer->setLayerName(ui->layerName->text());
        layer->setSource(ui->lineEditPath->text());
    } else {
        QMessageBox msgBox;
        msgBox.setText(tr("Worldfile is invalid or is missing!"));
        msgBox.exec();
        this->reject();
        return;
    }
}

void DialogLayerIMG::on_pushButtonLoad_clicked()
{
    QString dirWorld = QFileDialog::getOpenFileName(this, tr("Open image worldfile"),
                                                    dir,
                                                    tr("Worldfiles (*.*);;"));
    if (dirWorld == "") return;

    if (layer->loadWorldFileTiny(dirWorld)){
        ui->plainTextEditWorldFile->setPlainText(layer->getItems().join("\n"));

        if (layer->getItems().size()==6){
            QPixmap img;
            if (!img.load(dir)) return;
            layer->setIMG(img);
            layer->processWorldFile();
            ui->lineEditOriginLonlat->setText(layer->zavaProj.lonlat2dms(layer->getOriginPoint()));
            ui->spinBoxZoom->setValue(layer->getOriginZoom());
        }
        else {
            QMessageBox msgBox;
            msgBox.setText(tr("Worldfile is invalid or is missing!"));
            msgBox.exec();
            return;
        }

    }
}

